package com.wink_172.library.view

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
import com.wink_172.library.utils.DisplayUtil

/**
 * 自定义底部横线的Textview  可适用于Tablayout
 * 最小单元 到此为止 没必要把tabLayout再组成一个封装-因为样式多样化，最后会让自己头疼，反而脱离了简单实用
 */
open class UnderlineTextView  //通过XML配置且定义样式时会调用这个函数
    (context: Context?, attrs: AttributeSet?, defStyle: Int) :
    AppCompatTextView(context, attrs, defStyle) {
    public val paint01 = Paint()
    public var underlineHeight = 0
    public var underlineWidthPadding = 5
    public var underLineColor=0

    constructor(context: Context?) : this(context, null) {}

    //通过XML配置但不定义style时会调用这个函数
    @SuppressLint("ResourceType")
    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0) {
        underLineColor = Color.parseColor("#ffdc00")
        //    字体颜色方法1    setTextColor(getResources().getColorStateList(R.drawable.selector_text_color));
//    字体颜色方法2    android:textColor="@drawable/selector_text_color"
//     可在调用方自行替换颜色
        underlineHeight = DisplayUtil.dp2px(context, 0f) //默认为0
    }

    //防止下划线高度大到一定值时会覆盖掉文字，需从写此方法
    override fun setPadding(left: Int, top: Int, right: Int, bottom: Int) {
        super.setPadding(left, top, right, bottom + underlineHeight)
    }

    //绘制下划线
    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        //设置下划线颜色
        paint01.color = underLineColor
        val paint02 = paint
        val textLength = paint02.measureText(text.toString()) //文字的宽度
        val padding = ((width - textLength) / 2).toInt()
        canvas.drawRect(
            (padding + underlineWidthPadding).toFloat(),
            (height - underlineHeight).toFloat(),//height 是这view控件的高度 请固定好高度
            (width - padding - underlineWidthPadding).toFloat(),
            height.toFloat(),
            paint01
        )
    }

    /**
     * 更新底部线的高度
     */
    fun updateLine(height: Int) {
        underlineHeight = height
        invalidate() //重新绘制
    }

    /**
     * 更新底部线的宽度--通过调整左右间距
     */
    fun updateLineWidth(padding: Int) {
        underlineWidthPadding = padding
        invalidate() //重新绘制
    }

    /**
     * 更新底部线条的颜色
     */
    fun updateLineColor(color: Int) {
        underLineColor = color
    }

    /**
     * 可动态控制文字大小
     */
    fun updateTextSize(size: Int) {
        textSize = size.toFloat()
    }

    /**
     * 更新文字和底部线条的间距
     */
    fun updateLineSpace(padding: Int) {}
}